home *** CD-ROM | disk | FTP | other *** search
/ CD Ware Multimedia 1995 May / cd Ware (Juegos) Epimundo.iso / DOS / C / COP.ZIP / SHAPE.H < prev    next >
Encoding:
C/C++ Source or Header  |  1992-07-21  |  4.3 KB  |  176 lines

  1. #include <graphics.h>
  2.  
  3. #ifndef shape_H
  4. #define shape_H
  5.  
  6. #ifndef COP_H
  7. #include "cop.h"
  8. #endif
  9.  
  10.  
  11. struct_vFt_forward(Shape);
  12.  
  13. struct_(Shape) {
  14. /* private: */
  15.     unsigned x, y;
  16.     polymorphic();
  17.     vFT_decl(Shape);
  18. };
  19.  
  20. struct_vFt(Shape) {
  21.     vF_decl(void,show,
  22.         (Shape * thiS, int xxpose,
  23.         int yxpose, unsigned scale));
  24.       vF_decl(void,destruct,(Shape * thiS,
  25.         unsigned nobj, int malloced));
  26. };
  27.  
  28. vFt_decl(Shape,Shape);
  29.  
  30. vf_decl(void,SH,SH,show,(Shape * thiS, int xxpose,
  31.     int yxpose, unsigned scale));
  32. vf_decl(void,SH,SH,destruct,(Shape * thiS,
  33.     unsigned nobj, int malloced));
  34.  
  35.  
  36. struct_initVFTs_decl(SH,(Shape * thiS, 
  37.     void * descendanT_0, vFT_0_decl(Shape)));
  38.  
  39. #define SH_malloc(nobj)  MALLOC(sizeof(Shape)*nobj)
  40. #define SH_free(thiS)  FREE(thiS)
  41.  
  42.  
  43. struct_init_decl(Shape,SH,_,
  44.     (Shape * thiS_0, unsigned nobj,
  45.         unsigned x, unsigned y));
  46.  
  47. struct_destruct_decl(Shape,SH);
  48.  
  49.  
  50. #define SH_init(thiS_0,nobj,x,y)  \
  51.     struct_init(SH,_,(thiS_0,nobj,x,y))
  52. #define SH_init_default(thiS_0)  \
  53.     SH_init(thiS_0,1,0,0)
  54. #define SH_new(nobj,x,y)  \
  55.     SH_init((Shape *)0,nobj,x,y)
  56. #define SH_new_default()  \
  57.     SH_init_default((Shape *)0)
  58. #define SH_destruct(thiS,nobj)  \
  59.     vf_runTimeBind(thiS,destruct,(thiS,nobj,0))
  60. #define SH_delete(thiS_0,nobj) \
  61.     if (thiS_0) vf_runTimeBind(thiS_0,  \
  62.     destruct,(thiS_0,nobj,1)); else
  63.  
  64. #define SH_getx(thiS)  (1?(thiS)->x:0)
  65. #define SH_gety(thiS)  (1?(thiS)->y:0)
  66.  
  67. #define SH_show(thiS,xxpose,yxpose,scale)  \
  68.     vf_runTimeBind(thiS,show,  \
  69.     (thiS,xxpose,yxpose,scale))
  70. #define SH_show_default(thiS)  SH_show(thiS,0,0,1)
  71.  
  72.  
  73. struct_(Segment)  {
  74. /* private: */
  75.     Shape ** shapes;
  76.     unsigned shapeCount;
  77.     polymorphic();
  78. /* public: */
  79.     inherit(Shape);
  80. };
  81.  
  82. #define SG_ShapeThiS(thiS)   baseThiS(thiS,Shape)
  83. polyBaseThiS_0_decl(SG,Shape,Segment);
  84. #define SH_SegmentThiS(thiS) derivedThiS(thiS,Segment)
  85.  
  86. vFt_decl(Segment,Shape);
  87.  
  88. vf_decl(void,SG,SH,show,(Shape * thiS, int xxpose,
  89.     int yxpose, unsigned scale));
  90. vf_decl(void,SG,SH,destruct,(Shape * thiS,
  91.     unsigned nobj, int malloced));
  92.  
  93. struct_initVFTs_decl(SG,(Segment * thiS,
  94.     void * descendanT_0, vFT_0_decl(Shape)));
  95.  
  96. #define SG_malloc(nobj)  MALLOC(sizeof(Segment)*nobj)
  97. #define SG_free(thiS)  FREE(thiS)
  98.  
  99. struct_init_decl(Segment,SG,_,
  100.     (Segment * thiS_0, unsigned nobj,
  101.         unsigned x, unsigned y,
  102.         unsigned shapeCount, ...));
  103.  
  104. struct_destruct_decl(Segment,SG);
  105.  
  106. #define SG_init(actualParams)  \
  107.     struct_init(SG,_,actualParams)
  108. /* actualParams: (thiS_0,1,x,y,shapeCount,...) */
  109. #define SG_destruct(thiS)  \
  110.     SH_destruct(SG_ShapeThiS(thiS),1)
  111. #define SG_delete(thiS_0) \
  112.     SH_delete(SG_ShapeThiS(thiS_0),1)
  113.  
  114. #define SG_getx(thiS) SH_getx(SG_ShapeThiS(thiS))
  115. #define SG_gety(thiS) SH_gety(SG_ShapeThiS(thiS))
  116. #define SG_show(thiS,xxpose,yxpose,scale)  \
  117.     SH_show(SG_ShapeThiS(thiS),xxpose,yxpose,scale)
  118. #define SG_show_default(thiS) SG_show(thiS,0,0,1)
  119.  
  120.  
  121. struct_(Circle)  {
  122. /* private: */
  123.     polymorphic();
  124. /* protected: */
  125.     unsigned radius;
  126. /* public: */
  127.     inherit(Shape);
  128. };
  129.  
  130. #define CR_ShapeThiS(thiS) baseThiS(thiS,Shape)
  131. polyBaseThiS_0_decl(CR,Shape,Circle);
  132. #define SH_CircleThiS(thiS) derivedThiS(thiS,Circle)
  133.  
  134. vFt_decl(Circle,Shape);
  135.  
  136. vf_decl(void,CR,SH,show,(Shape * thiS, int xxpose,
  137.     int yxpose, unsigned scale));
  138. vf_decl(void,CR,SH,destruct,(Shape * thiS,
  139.     unsigned nobj, int malloced));
  140.  
  141. struct_initVFTs_decl(CR,(Circle * thiS, 
  142.     void * descendanT_0, vFT_0_decl(Shape)));
  143.  
  144. #define CR_malloc(nobj)  MALLOC(sizeof(Circle)*nobj)
  145. #define CR_free(thiS)  FREE(thiS)
  146.  
  147. struct_init_decl(Circle,CR,_,
  148.     (Circle * thiS_0, unsigned nobj,
  149.         unsigned radius,
  150.         unsigned x, unsigned y));
  151.  
  152. struct_destruct_decl(Circle,CR);
  153.  
  154. #define CR_init(thiS_0,nobj,radius,x,y)  \
  155.     struct_init(CR,_,(thiS_0,  \
  156.     nobj,radius,x,y))
  157. #define CR_init_default(thiS_0)  \
  158.     CR_init(thiS_0,1,(unsigned)getmaxy()/8,0,0)
  159. #define CR_new(nobj,radius,x,y)  \
  160.     CR_init((Circle *)0,nobj,radius,x,y)
  161. #define CR_new_default()  \
  162.     CR_init_default((Circle *)0)
  163. #define CR_destruct(thiS,nobj)  \
  164.     SH_destruct(CR_ShapeThiS(thiS),nobj)
  165. #define CR_delete(thiS_0,nobj) \
  166.     SH_delete(CR_ShapeThiS(thiS_0),nobj)
  167.  
  168. #define CR_getx(thiS) SH_getx(SG_ShapeThiS(thiS))
  169. #define CR_gety(thiS) SH_gety(SG_ShapeThiS(thiS))
  170. #define CR_show(thiS,xxpose,yxpose,scale)  \
  171.     SH_show(CR_ShapeThiS(thiS),xxpose,yxpose,scale)
  172. #define CR_show_default(thiS) CR_show(thiS,0,0,1)
  173.  
  174.  
  175. #endif
  176.